/**
 * 1.
 * await 后面跟一个表达式，是一个Promise
 * @returns {Promise<void>}
 */
function requestData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('resolve message...')
    }, 1000)
  })
}

async function foo() {
  const msg = await requestData()
  console.log('等待await执行完毕')
  console.log(
    '这里的代码不会再await前执行，相当于是requestData返回Promise的then中的内容'
  )

  const msg2 = await requestData()
  console.log('msg2: ' + msg2)
}

foo()

//2.跟上一个普通值

//3.跟上thenable

//4.跟上new Promise

/**
 * 如果await后面的promise执行过程中是被reject的，那么reject值将会作为整个异步函数的reject值，需要使用catch进行捕获
 */
async function foo1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject('reject msg...')
    }, 1000)
  })
}

// foo1() // UnhandledPromiseRejectionWarning: reject msg...

foo1().catch((err) => {
  console.log(err)
})
